home *** CD-ROM | disk | FTP | other *** search
/ Nibble Magazine / nib13.dsk / SORT BENCHMARKS.bas < prev    next >
BASIC Source File  |  2023-02-26  |  3KB  |  68 lines

  1. 1  REM  **********************
  2. 2  REM  *  SORT BENCHMARKS   *
  3. 3  REM  *  BY CURTIS BROWNE  *
  4. 4  REM  * COPYRIGHT (C) 1983 *
  5. 5  REM  * BY MICRO-SPARC INC *
  6. 6  REM  * LINCOLN, MA. 01773 *
  7. 7  REM  **********************
  8. 10  GOTO 1000
  9. 100  FOR J = 1 TO N -1: FOR I = 1 TO N -J
  10. 110  IF S$ = "D"  AND T(I) <T(I +1)  THEN TT = T(I):T(I) = T(I +1):T(I +1) = TT
  11. 120  IF S$ = "A"  AND T(I) >T(I +1)  THEN TT = T(I):T(I) = T(I +1):T(I +1) = TT
  12. 130  NEXT I,J: PRINT  CHR$(7): RETURN 
  13. 200  FOR J = 1 TO N -1: FOR I = 1 TO N -J
  14. 210 : IF T(I) <T(I +1)  THEN TT = T(I):T(I) = T(I +1):T(I +1) = TT
  15. 220 : IF T(I) >T(I +1)  THEN TT = T(I):T(I) = T(I +1):T(I +1) = TT
  16. 230  NEXT I,J: PRINT  CHR$(7): RETURN 
  17. 300  FOR J = 1 TO N -1: FOR I = 1 TO N -J
  18. 310  IF S1 = (T(I) >T(I +1))  THEN TT = T(I):T(I) = T(I +1):T(I +1) = TT
  19. 320  NEXT I,J: PRINT  CHR$(7): RETURN 
  20. 400 M = 1
  21. 410 M = 3 *M +1: IF M <N  THEN 410
  22. 420 M = (M -1)/3: IF M <1  THEN 460
  23. 430  FOR J = M +1 TO N:LL = J -M:TT = T(J)
  24. 440  IF S1 = (T(LL) >TT)  THEN T(LL +M) = T(LL):LL = LL -M: IF LL >0  THEN 440
  25. 450 T(LL +M) = TT: NEXT J: GOTO 420
  26. 460  PRINT  CHR$(7): RETURN 
  27. 500 S2 = 2 *S1 -1:T(0) =  -1E35 *S2:T(N +1) = 1E35 *S2:SP = 0:L = 1:R = N
  28. 505  IF R -L <9 GOTO 555
  29. 510 I = L:J = R:NN =  INT((L +R)/2):TT = T(NN):T(NN) = T(L):T(L) = TT
  30. 515  IF S1 = (TT <T(J))  THEN J = J -1: GOTO 515
  31. 520  IF J < = I  THEN T(I) = TT: GOTO 545
  32. 525 T(I) = T(J):I = I +1
  33. 530  IF S1 = (T(I) <TT)  THEN I = I +1: GOTO 530
  34. 535  IF J < = I  THEN T(J) = TT:I = J
  35. 540  IF J >I  THEN T(J) = T(I):J = J -1: GOTO 515
  36. 545  IF R -I =  >I -L  THEN SP = SP +1:ST(SP,1) = I +1:ST(SP,2) = R:R = I -1: GOTO 505
  37. 550  IF R -I <I -L  THEN SP = SP +1:ST(SP,1) = L:ST(SP,2) = I -1:L = I +1: GOTO 505
  38. 555  IF L +1 >R GOTO 590
  39. 560  FOR J = L +1 TO R
  40. 565 TT = T(J):I = J -1
  41. 570  IF S1 = (T(I) < = TT) GOTO 580
  42. 575 T(I +1) = T(I):I = I -1: GOTO 570
  43. 580 T(I +1) = TT
  44. 585  NEXT J
  45. 590  IF SP = 0  THEN  PRINT  CHR$(7): RETURN 
  46. 595 L = ST(SP,1):R = ST(SP,2):SP = SP -1: GOTO 505
  47. 1000  HOME : INPUT "HOW MANY NUMBERS TO BE SORTED? ";I$:N =  VAL(I$): IF I$ = ""  THEN 1000
  48. 1010  DIM T(N +1),H(N +1),DE$(5)
  49. 1020  FOR I = 1 TO N:T(I) =  INT( RND(1) *100 +1):H(I) = T(I): NEXT 
  50. 1030  VTAB 3: CALL  -958: PRINT "ASCENDING OR DESCENDING ORDER (A/D)? ";: GET S$: PRINT S$: IF S$ < >"A"  AND S$ < >"D"  THEN 1030
  51. 1040  IF S$ = "A"  THEN  POKE 2435,178
  52. 1050  IF S$ = "D"  THEN  POKE 2483,178
  53. 1060 S1 = (S$ = "A")
  54. 1070 DE$(1) = " IF/THEN  "
  55. 1071 DE$(2) = " REMPOKE  "
  56. 1072 DE$(3) = "SPECIAL IF"
  57. 1073 DE$(4) = "SHELLSORT "
  58. 1074 DE$(5) = "QUICKSORT "
  59. 2000  FOR NT = 1 TO 5
  60. 2100  HOME : INVERSE : PRINT "NUMBERS TO BE SORTED ": NORMAL : PRINT 
  61. 2200  FOR I = 1 TO N:T(I) = H(I): PRINT T(I),: NEXT : PRINT : PRINT 
  62. 2300  PRINT "START ";: INVERSE : PRINT "TEST ";NT;: NORMAL : PRINT " BY PRESSING ANY KEY": PRINT : PRINT "A BELL WILL SIGNAL THE END OF THE SORT ";: GET I$: PRINT : PRINT : PRINT : HTAB 10: PRINT ">>>> SORTING <<<<": PRINT 
  63. 2400  ON NT GOSUB 100,200,300,400,500
  64. 2500  HOME : INVERSE : PRINT "TEST ";NT;" SORT COMPLETED";: HTAB 26: PRINT DE$(NT): NORMAL : PRINT 
  65. 2600  FOR I = 1 TO N: PRINT T(I),: NEXT : PRINT : GOSUB 9100
  66. 2700  NEXT NT
  67. 9000  POKE 2435,58: POKE 2483,58: PRINT : PRINT : PRINT " RUN    (FOR ANOTHER TEST)";: CALL  -998: END 
  68. 9100  HTAB 6: VTAB 24: PRINT "PRESS ANY KEY TO CONTINUE";: GET I$: RETURN